#summary frequently asked questions with answers

= Developer FAQ =

* How should one handle repository being unavailable during init()?

init() will error if the SP server is unavailable, but the
GsaCommunicationHandler will retry init() using exponential backoff
(starting at a second and maxes at an hour) until it is interrupted,
shutdown, or successful.


* How do I get a reference to the DocIdPusher?

Use AdaptorContext.getDocIdPusher() that you get in init.


* How do I feed document that has changed?

Send a Record for that DocId with crawl-immediately being true.


* How do I feed a document that has been deleted?

Tell the GSA to crawl the document, which will result in 404, which will result in a deletion.  If you'd like you can set delete to be true in Record, but that's not necessary.


* How do I make an ACL?

Use Acl.Builder


* Can I represent multiple ACLs for same document?

Yes. 

Consider: some/path/Folder and some/path/Folder/File

Acls:<br>
some/path/Folder (sent via retriever)<br>
generated/inherit_file/some/path/Folder (sent via pushNamedResources)<br>
generated/inherit_folder/some/path/Folder (sent via pushNamedResources)<br>
some/path/Folder/File inherits from generated/inherit_file/some/path/Folder (sent via retriever)<br>

To send using pushNamedResources, create the other ACLs and then spawn a new thread that calls pushNamedResources.

* I'm getting interruption exception, what am I doing wrong?

The adaptor has 30 seconds to start sending content, and 3 minutes to complete sending content.  The config values are adaptor.docContentTimeoutSecs and adaptor.docHeaderTimeoutSecs.