private boolean publishMultiResponseDBUpdate(long conId, long seqCode) { boolean result = service.publishHTTPResponse(conId, seqCode, 200, HTTPContentTypeDefaults.JSON, w-> { Templates.multiTemplate.render(w, collectorDBUpdate); int c = collectorDBUpdate.size(); while (--c>=0) { assert(collectorDBUpdate.get(c).getConnectionId() == conId); assert(collectorDBUpdate.get(c).getSequenceId() == seqCode); collectorDBUpdate.get(c).setStatus(-1); } collectorDBUpdate.clear(); DBUpdateInFlight.publishTailPosition(); }); collectionPendingDBUpdate = !result; return result; }
private boolean publishMultiDBResponse(long conId, long seqCode) { final boolean result = service.publishHTTPResponse(conId, seqCode, 200, HTTPContentTypeDefaults.JSON, w-> { Templates.multiTemplateDBRest.render(w, collectorDBRest); int c = collectorDBRest.size(); assert(collectorDBRest.get(0).getGroupSize()==c); while (--c >= 0) { assert(collectorDBRest.get(0).getGroupSize()==collectorDBRest.size()); assert(collectorDBRest.get(c).getConnectionId() == conId) : c+" expected conId "+conId+" error: "+showCollection(collectorDBRest); assert(collectorDBRest.get(c).getSequenceId() == seqCode) : c+" sequence error: "+showCollection(collectorDBRest); collectorDBRest.get(c).setStatus(-1); } collectorDBRest.clear(); DBRestInFlight.publishTailPosition(); }); collectionPendingDBRest = !result; return result; }
private boolean consumeResultObjectDBRest(final ResultObject t) { boolean ok; /////////////////////////////// if (0 == t.getGroupSize()) { ok = service.publishHTTPResponse(t.getConnectionId(), t.getSequenceId(), 200, HTTPContentTypeDefaults.JSON, w-> { Templates.singleTemplateDBRest.render(w, t); t.setStatus(-1); DBRestInFlight.moveTailForward();//only move forward when it is consumed. DBRestInFlight.publishTailPosition(); }); } else { //collect all the objects assert(isValidToAdd(t, collectorDBRest)); collectorDBRest.add(t); DBRestInFlight.moveTailForward(); if (collectorDBRest.size() == t.getGroupSize()) { //now ready to send, we have all the data ok =publishMultiDBResponse(t.getConnectionId(), t.getSequenceId()); } else { ok = true;//added to list } //moved forward so we can read next but write logic will still be blocked by state not -1 } return ok; }
fortuneInFlight.publishTailPosition(); t.list().clear(); htmlFortuneBuffer.clear();