private void stateOrInit() { synchronized(lock) { JsonObject obj = getWatchedState(); if ( obj != null ) jsonSetState(obj); else initState(); if ( version == DeltaConst.VERSION_UNSET ) save(DeltaConst.VERSION_INIT, current, previous); } }
private void initState() { runWithLock(()->{ FmtLog.debug(LOG, "initState %s", logName); if ( current == null ) earliestVersion = Version.INIT; version = DeltaConst.VERSION_INIT; save(version, current, previous); }); }
private void syncState() { JsonObject obj = getWatchedState(); if ( obj != null ) jsonSetState(obj); }
private void save(long version, Id patch, Id prev) { newState(version, patch, prev); JsonObject x = stateToJson(version, patch, prev); byte[] bytes = JSONX.asBytes(x); if ( patch != null ) { // [META] // Record the basic header - (version, id, prev) - for validation. if ( keepHeaderInfo ) Zk.zkCreateSet(client, headerPath(patch), bytes); // Write version->id mapping. Zk.zkCreateSet(client, versionPath(version), patch.asBytes()); } Zk.zkSet(client, statePath, bytes); }
@Override public PatchInfo getPatchInfo(Id id) { String p = headerPath(id); JsonObject obj = Zk.zkFetchJson(client, p); Id patchId = getIdOrNull(obj, fId); if ( ! Objects.equals(id, patchId) ) { /*msg*/ } Id prevId = getIdOrNull(obj, fPrevious); long ver = JSONX.getLong(obj, fVersion, -99); Version version = ver < 0 ? Version.UNSET : Version.create(ver); return new PatchInfo(patchId, Version.UNSET, prevId); }
private void jsonSetState(JsonObject obj) { try { FmtLog.debug(LOG, "jsonToState %s",JSON.toStringFlat(obj)); long ver = obj.get(fVersion).getAsNumber().value().longValue(); if ( ver == version ) return ; Id newCurrent = getIdOrNull(obj, fId); Id newPrevious = getIdOrNull(obj, fPrevious); newState(ver, newCurrent, newPrevious); } catch (RuntimeException ex) { FmtLog.error(this.getClass(), "Failed to load the patch log index state", ex); } }
@Override public void save(Version version, Id patch, Id prev) { // Should always be called inside the patch lock. save(version.value(), patch, prev); }
String path = zkPath(headersPath, idStr); JsonObject obj = Zk.zkFetchJson(client, path); Id patchId = getIdOrNull(obj, fId); if ( ! Objects.equals(id, patchId) ) { /*msg*/ } Id prevId = getIdOrNull(obj, fPrevious); long ver = JSONX.getLong(obj, fVersion, -99); if ( patchId == null ) {
@Override public PatchLogIndex newPatchLogIndex(DataSourceDescription dsd, PatchStore patchStore, LocalServerConfig configuration) { PatchStoreZk patchStoreZk = (PatchStoreZk)patchStore; String logPath = zkPath(ZkConst.pLogs, dsd.getName()); return new PatchLogIndexZk(patchStoreZk.getClient(), patchStoreZk.getInstance(), dsd, logPath); }
JsonObject initialState = PatchLogIndexZk.initialStateJson();