virtual void init(MemoryBuffer &data, MemoryBuffer &slaveData) override { isLocal = 0 != (TIWlocal & helper->getFlags()); mpTag = container.queryJobChannel().deserializeMPTag(data); mpTag2 = container.queryJobChannel().deserializeMPTag(data); data.read(active); if (active) { data.read(logicalFilename); partDesc.setown(deserializePartFileDescriptor(data)); } data.read(singlePartKey); data.read(refactor); if (singlePartKey) buildTlk = false; else { data.read(buildTlk); if (firstNode()) { if (buildTlk) tlkDesc.setown(deserializePartFileDescriptor(data)); else if (!isLocal) // existing tlk then.. { tlkDesc.setown(deserializePartFileDescriptor(data)); unsigned c; data.read(c); while (c--) { RemoteFilename rf; rf.deserialize(data); if (!existingTlkIFile) { Owned<IFile> iFile = createIFile(rf); if (iFile->exists()) existingTlkIFile.set(iFile); } } if (!existingTlkIFile) throw MakeActivityException(this, TE_FileNotFound, "Top level key part does not exist, for key"); } } } IOutputMetaData * diskSize = helper->queryDiskRecordSize(); assertex(!(diskSize->getMetaFlags() & MDFneedserializedisk)); if (diskSize->isVariableSize()) { if (TIWmaxlength & helper->getFlags()) maxDiskRecordSize = helper->getMaxKeySize(); else maxDiskRecordSize = KEYBUILD_MAXLENGTH; //Current default behaviour, could be improved in the future } else maxDiskRecordSize = diskSize->getFixedSize(); reportOverflow = false; }
void CDiskWriteSlaveActivityBase::init(MemoryBuffer &data, MemoryBuffer &slaveData) { diskHelperBase = static_cast <IHThorDiskWriteArg *> (queryHelper()); data.read(logicalFilename); dlfn.set(logicalFilename); if (diskHelperBase->getFlags() & TDXtemporary) data.read(usageCount); if (diskHelperBase->getFlags() & TDWextend) { assertex(!"TBD extended CRC broken"); unsigned crc; if (partDesc->getCrc(crc)) fileCRC.reset(~crc); } partDesc.setown(deserializePartFileDescriptor(data)); if (dlfn.isExternal()) { mpTag = container.queryJob().deserializeMPTag(data); if (dlfn.isQuery() && (0 != container.queryJob().getWorkUnitValueInt("rfsqueryparallel", 0))) rfsQueryParallel = true; } if (0 != (diskHelperBase->getFlags() & TDXgrouped)) grouped = true; compress = partDesc->queryOwner().isCompressed(); void *ekey; size32_t ekeylen; diskHelperBase->getEncryptKey(ekeylen,ekey); if (ekeylen!=0) { ecomp.setown(createAESCompressor256(ekeylen,ekey)); memset(ekey,0,ekeylen); free(ekey); compress = true; } }
void CDiskWriteSlaveActivityBase::init(MemoryBuffer &data, MemoryBuffer &slaveData) { StringAttr logicalFilename; data.read(logicalFilename); dlfn.set(logicalFilename); if (diskHelperBase->getFlags() & TDXtemporary) data.read(usageCount); if (diskHelperBase->getFlags() & TDWextend) { assertex(!"TBD extended CRC broken"); unsigned crc; if (partDesc->getCrc(crc)) fileCRC.reset(~crc); } partDesc.setown(deserializePartFileDescriptor(data)); // put temp files in individual slave temp dirs (incl port) if ((diskHelperBase->getFlags() & TDXtemporary) && (!container.queryJob().queryUseCheckpoints())) partDesc->queryOwner().setDefaultDir(queryTempDir()); if (dlfn.isExternal()) { mpTag = container.queryJobChannel().deserializeMPTag(data); if (dlfn.isQuery() && (0 != container.queryJob().getWorkUnitValueInt("rfsqueryparallel", 0))) rfsQueryParallel = true; } if (0 != (diskHelperBase->getFlags() & TDXgrouped)) grouped = true; }