openvibers/openvibe.host Commits
Complete Compare stateless lifecycle declaration (#379)
Changes
@@@ -26,6 +26,7 @@ def entry():'shutdown': {'signal': 'SIGTERM', 'deadlineSeconds': 10, 'drains': ['HTTP server closed']},'startupRecovery': {'resumes': [{'kind': 'state', 'what': 'Refetch public sources after ten-minute cache reset'}]},'rollback': {'conditions': ['Ready probe fails'], 'window': 'Any time', 'blockers': {'none': 'Stateless; no migrations'}},++ 'contracts': {'none': 'Stateless public reads; no runtime Contracts dependency. Comparison schema release is held separately.'},'leases': {'none': 'No workers or writes'},},}@@@ -3,7 +3,7 @@ const assert=require('node:assert/strict'),fs=require('node:fs'),os=require('nodconst dir=fs.mkdtempSync(path.join(os.tmpdir(),'compare-inventory-')),file=path.join(dir,'host.json');try {const run=()=>spawnSync('python3',[path.join(__dirname,'../scripts/register-compare.py'),file],{encoding:'utf8'});-- fs.writeFileSync(file,JSON.stringify({services:{existing:{port:5000}}}));assert.equal(run().status,0);let d=JSON.parse(fs.readFileSync(file));assert.equal(d.services.existing.port,5000);assert.equal(d.services.compare.port,5280);assert.deepEqual(d.services.compare.databases,[]);assert.equal(run().status,0);++ fs.writeFileSync(file,JSON.stringify({services:{existing:{port:5000}}}));assert.equal(run().status,0);let d=JSON.parse(fs.readFileSync(file));assert.equal(d.services.existing.port,5000);assert.equal(d.services.compare.port,5280);assert.deepEqual(d.services.compare.databases,[]);assert.deepEqual(require('../lib/lifecycle').check(d.services.compare.lifecycle,{runs:true}),[]);assert.equal(run().status,0);fs.writeFileSync(file,JSON.stringify({services:{collision:{port:5280}}}));assert.notEqual(run().status,0);assert(!JSON.parse(fs.readFileSync(file)).services.compare);console.log('compare registration: preserves inventory, idempotent, rejects port collision');} finally {fs.rmSync(dir,{recursive:true,force:true});}
@@ -26,6 +26,7 @@ def entry():
@@ -26,6 +26,7 @@ def entry():
'shutdown': {'signal': 'SIGTERM', 'deadlineSeconds': 10, 'drains': ['HTTP server closed']},
'shutdown': {'signal': 'SIGTERM', 'deadlineSeconds': 10, 'drains': ['HTTP server closed']},
'startupRecovery': {'resumes': [{'kind': 'state', 'what': 'Refetch public sources after ten-minute cache reset'}]},
'startupRecovery': {'resumes': [{'kind': 'state', 'what': 'Refetch public sources after ten-minute cache reset'}]},
'rollback': {'conditions': ['Ready probe fails'], 'window': 'Any time', 'blockers': {'none': 'Stateless; no migrations'}},
'rollback': {'conditions': ['Ready probe fails'], 'window': 'Any time', 'blockers': {'none': 'Stateless; no migrations'}},
+ 'contracts': {'none': 'Stateless public reads; no runtime Contracts dependency. Comparison schema release is held separately.'},
'leases': {'none': 'No workers or writes'},
'leases': {'none': 'No workers or writes'},
},
},
}
}
@@ -3,7 +3,7 @@ const assert=require('node:assert/strict'),fs=require('node:fs'),os=require('nod
@@ -3,7 +3,7 @@ const assert=require('node:assert/strict'),fs=require('node:fs'),os=require('nod
const dir=fs.mkdtempSync(path.join(os.tmpdir(),'compare-inventory-')),file=path.join(dir,'host.json');
const dir=fs.mkdtempSync(path.join(os.tmpdir(),'compare-inventory-')),file=path.join(dir,'host.json');
try {
try {
const run=()=>spawnSync('python3',[path.join(__dirname,'../scripts/register-compare.py'),file],{encoding:'utf8'});
const run=()=>spawnSync('python3',[path.join(__dirname,'../scripts/register-compare.py'),file],{encoding:'utf8'});
- fs.writeFileSync(file,JSON.stringify({services:{existing:{port:5000}}}));assert.equal(run().status,0);let d=JSON.parse(fs.readFileSync(file));assert.equal(d.services.existing.port,5000);assert.equal(d.services.compare.port,5280);assert.deepEqual(d.services.compare.databases,[]);assert.equal(run().status,0);
+ fs.writeFileSync(file,JSON.stringify({services:{existing:{port:5000}}}));assert.equal(run().status,0);let d=JSON.parse(fs.readFileSync(file));assert.equal(d.services.existing.port,5000);assert.equal(d.services.compare.port,5280);assert.deepEqual(d.services.compare.databases,[]);assert.deepEqual(require('../lib/lifecycle').check(d.services.compare.lifecycle,{runs:true}),[]);assert.equal(run().status,0);
fs.writeFileSync(file,JSON.stringify({services:{collision:{port:5280}}}));assert.notEqual(run().status,0);assert(!JSON.parse(fs.readFileSync(file)).services.compare);
fs.writeFileSync(file,JSON.stringify({services:{collision:{port:5280}}}));assert.notEqual(run().status,0);assert(!JSON.parse(fs.readFileSync(file)).services.compare);
console.log('compare registration: preserves inventory, idempotent, rejects port collision');
console.log('compare registration: preserves inventory, idempotent, rejects port collision');
} finally {fs.rmSync(dir,{recursive:true,force:true});}
} finally {fs.rmSync(dir,{recursive:true,force:true});}