MCPcopy Create free account
hub / github.com/dmtcp/dmtcp / kvdbRequest

Function kvdbRequest

src/coordinatorapi.cpp:755–799  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

753}
754
755kvdb::KVDBResponse
756kvdbRequest(DmtcpMessage const& msg,
757 string const& key,
758 string const& val,
759 string *oldVal)
760{
761 int sock = coordinatorSocket;
762
763 if (dmtcp_is_running_state() &&
764 dmtcp_is_ckpt_thread /* weak symbol */ &&
765 !dmtcp_is_ckpt_thread()) {
766 if (nsSock == -1) {
767 nsSock = createNewSocketToCoordinator(COORD_ANY);
768 JASSERT(nsSock != -1);
769 nsSock = Util::changeFd(nsSock, PROTECTED_NS_FD);
770 sock = nsSock;
771 DmtcpMessage m(DMT_NAME_SERVICE_WORKER);
772 JASSERT(Util::writeAll(sock, &m, sizeof(m)) == sizeof(m));
773 }
774 sock = nsSock;
775 }
776
777 JASSERT(Util::writeAll(sock, &msg, sizeof(msg)) == sizeof(msg));
778 JASSERT(Util::writeAll(sock, key.data(), msg.keyLen) ==
779 (ssize_t)msg.keyLen);
780 JASSERT(Util::writeAll(sock, val.data(), msg.valLen) ==
781 (ssize_t)msg.valLen);
782
783 DmtcpMessage reply;
784 reply.poison();
785 JASSERT(Util::readAll(sock, &reply, sizeof(reply)) == sizeof(reply));
786 reply.assertValid();
787 JASSERT(reply.type == DMT_KVDB_RESPONSE);
788
789 if (reply.extraBytes != 0) {
790 char valBuf[reply.extraBytes];
791 JASSERT(Util::readAll(sock, valBuf, reply.valLen) ==
792 (ssize_t)reply.valLen);
793 if (oldVal != nullptr) {
794 *oldVal = valBuf;
795 }
796 }
797
798 return reply.kvdbResponse;
799}
800} // namespace CoordinatorAPI {
801} // namespace dmtcp {

Callers 1

requestFunction · 0.85

Calls 7

dmtcp_is_ckpt_threadFunction · 0.85
writeAllFunction · 0.85
readAllFunction · 0.85
dmtcp_is_running_stateFunction · 0.70
poisonMethod · 0.45
assertValidMethod · 0.45

Tested by

no test coverage detected