Changeset 31903
- Timestamp:
- 2017-08-18T19:28:42+12:00 (6 years ago)
- Location:
- main/trunk/greenstone2/runtime-src/src
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
main/trunk/greenstone2/runtime-src/src/colservr/browsefilter.cpp
r31394 r31903 143 143 if(parentnode == "oai") { // doing an OAI listidentifiers request 144 144 145 // open up the oai-inf db , if it exists, and return all IDs146 // if itdoesn't exist, proceed as usual145 // open up the oai-inf db if it exists, and return all IDs *except* the special OID=OAI_EARLIESTTIMESTAMP_OID 146 // if oai-inf db doesn't exist, proceed as usual 147 147 success = get_oaiinf_db_entries(response, err, logout); //adds any stuff in oai-inf db for the current OID to resultdoc.metadata 148 148 … … 377 377 378 378 resultdoc.OID = (*key_here); 379 379 380 // OAI_EARLIESTTIMESTAMP_OID is the OID of a special record that we'll ignore 381 // here in browsefilter.cpp, since it's not a doc. 382 // When the *metadata* for this special OID is requested, source.cpp will handle it 383 if(resultdoc.OID == OAI_EARLIESTTIMESTAMP_OID) { 384 ++key_here; 385 continue; 386 } 387 380 388 if(!oaidb_ptr->getinfo(resultdoc.OID, oai_info)) { 381 389 logout << text_t2ascii -
main/trunk/greenstone2/runtime-src/src/colservr/collectserver.cpp
r31387 r31903 535 535 // first check for oai metadata from the oai_db, if asked for it (if FROAI is set) 536 536 if(((*source_here).s != NULL) && 537 request.filterResultOptions & FROAI&&537 (request.filterResultOptions & FROAI) && 538 538 ((*source_here).s->get_oai_metadata(request.requestParams, request.refParams, 539 539 request.getParents, request.fields, … … 546 546 } 547 547 548 // if OID is the special OAI specific OAI_EARLIESTTIMESTAMP_OID, 549 // then we'd have got its OAI meta above if we were requested to do so. 550 // Either way, we won't be additionally getting regular meta for this OID, 551 // as it's not a real doc OID, so we stop processing this OID here. 552 if((*resultdoc_here).OID == OAI_EARLIESTTIMESTAMP_OID) { 553 ++source_here; 554 if(processed == true) break; 555 else continue; 556 } 557 548 558 // We may or may not have got oai_meta (depends on if FROAI was set). 549 559 // If we didn't get oai_meta, then deleted_status would still be "". -
main/trunk/greenstone2/runtime-src/src/colservr/comtypes.h
r31387 r31903 48 48 #endif 49 49 50 51 const text_t OAI_EARLIESTTIMESTAMP_OID = "earliesttimestamp"; 52 // https://www.tutorialspoint.com/cplusplus/cpp_constants_literals.htm 50 53 51 54 enum comerror_t {noError, authenticationFailure, protocolError, … … 113 116 text_tmap dynamic_classifiers; 114 117 text_t earliestDatestamp; // For OAIserver validation. Time since linux Epoch, expressed as (long) integer value in string form 118 // This field stored the builddate value from a collection's index/build.cfg file. 119 // This field earliestDatestamp was used when oaiaction.calcEarliestDatestamp() needed to 120 // determine the earliest timestamp of the repository, by selecting the earliestDatestamp among 121 // all oai collections. Now it's no longer used by OAI, as that resorts to consulting oai-inf.db 122 // of each collection, which has a collection's earliest timestamp stored, to work out the 123 // earliest timestamp among all collections. But the build.cfg builddate stored in the 124 // earliestDatestamp field may still be useful in future for some purpose, so leaving it alone. 125 115 126 }; 116 127 -
main/trunk/greenstone2/runtime-src/src/oaiservr/listidsaction.cpp
r31387 r31903 237 237 text_tset metadata; 238 238 ofstream logout("oai.log", ios::app); 239 // logout closed automatically by object destructor at this method's end: 240 // https://stackoverflow.com/questions/748014/do-i-need-to-manually-close-an-ifstream 239 241 text_t lastModified = ""; 240 242 text_t deleted_status = ""; -
main/trunk/greenstone2/runtime-src/src/oaiservr/oaiaction.cpp
r31390 r31903 551 551 } 552 552 553 // works out the earliest date/timestamp of the OAI repository, 554 // which compares and then selects the earliest timestamp value among all collections. 555 // In the past, the earliest date/timestamp used to be the unix epoch, 556 // later it became the earliest among each collection's builddate in build.cfg, 557 // and now, after implementing the OAI deletion policy, it needed to become the earliest 558 // among each collection's OAI_EARLIESTTIMESTAMP_OID record's timestamp value. 559 553 560 text_t oaiaction::calcEarliestDatestamp(recptproto *protocol, oaiargs ¶ms) { 554 561 … … 570 577 // (the earliestDatestamp for a collection has already been extracted from 571 578 // their build.cfg file at this point by collectserver::configure. The field 572 // is declared in comtypes.h) 573 579 // is declared in comtypes.h) 580 581 // We've changed this again to grab the timestamp field of the OAI_EARLIESTTIMESTAMP_OID 582 // record of each collection's oai-inf.db (representing the time that collection was 583 // built for the very first time) and choosing the earliest among all of them. 574 584 575 585 // Get a list of the OAI-enabled collections available … … 597 607 collection_iterator++; 598 608 } 609 610 ofstream logout("oai.log", ios::app); 599 611 600 612 // Now loop through the remaining collections … … 604 616 collection_name = (*collection_iterator); 605 617 618 text_tset metadata; 619 FilterResponse_t response; 620 621 // get timestamps from etc/oai-inf.<db> now, no longer from build.cfg 622 // request the special record with OID=OAI_EARLIESTTIMESTAMP_OID for the collection 623 bool status_ok = get_oai_info(OAI_EARLIESTTIMESTAMP_OID, collection_name, "", metadata, false, protocol, response, logout); 624 625 if(status_ok) { 626 ResultDocInfo_t doc_info = response.docInfo[0]; 627 text_t collEarliestTimestamp; 628 // the timestamp we want lives in the "lastmodified" field of the OAI_EARLIESTTIMESTAMP_OID record 629 this->getLastModifiedDate(doc_info, collEarliestTimestamp); 630 631 if(earliestDatestamp == "") { // first earliestdatestamp we've seen for an oai collection 632 earliestDatestamp = collEarliestTimestamp; 633 } else if(collEarliestTimestamp < earliestDatestamp) { 634 earliestDatestamp = collEarliestTimestamp; 635 } 636 } /*else { // collection may not have oai-inf.db (yet), check build.cfg? 637 // No: no need to use the old way as fallback 638 606 639 ColInfoResponse_t cinfo; 607 640 comerror_t err; … … 618 651 } 619 652 } 653 } 654 */ 620 655 collection_iterator++; 621 656 622 } 657 } 658 logout.close(); 623 659 } 624 660 -
main/trunk/greenstone2/runtime-src/src/protocol/recptprototools.cpp
r31387 r31903 34 34 // THIS FILE IS A CANDIDATE FOR REFACTORING: merge get_info methods 35 35 36 // overloaded, to allow "custom" filter options. 36 37 bool get_info (const text_t &OID, const text_t &collection, const text_t &lang, 37 38 const text_tset &metadata, bool getParents, … … 76 77 } 77 78 78 // overloaded, to allow "custom" filter options.79 79 bool get_info (const text_t &OID, const text_t &collection, const text_t &lang, 80 80 const text_tset &metadata, const OptionValue_tarray &options,
Note:
See TracChangeset
for help on using the changeset viewer.