Content service returns old content for some time
===

I'm using following snippet for saving content:

    private void writeToFile(NodeRef nodeRef, String content) throws IOException {
		ContentWriter writer = contentService.getWriter(nodeRef, ContentModel.PROP_CONTENT, true);
		InputStream contentStream = new ByteArrayInputStream(content.getBytes(encoding));
		
		writer.setMimetype(mimeType);
		writer.setEncoding(encoding);
		writer.putContent(contentStream);
	
		Map<QName, Serializable> repoProps = nodeService.getProperties(nodeRef);
		
		ContentData contentData = (ContentData) repoProps.get(ContentModel.PROP_CONTENT);
		if(contentData == null)
			contentData = writer.getContentData();
		
        contentData = ContentData.setEncoding(contentData, encoding);
        contentData = ContentData.setMimetype(contentData, mimeType);
        repoProps.put(ContentModel.PROP_CONTENT, contentData);
        
        contentStream.close();
        
        nodeService.setProperties(nodeRef, repoProps);
    }

When I read content written this way within short period of time (depends on server load) in other place, old content is returned. So it looks like that maybe indexing is in progress, so before final commit old content is returned, is that possible? If so, is it possible to override this behavior and access newest possible content?

To avoid this behavior I'm using thread for each read request, which sleeps for some time at the beginning, but I really dislike this "solution".


Edit: reading looks like this:

    private byte[] readFileContent(NodeRef nodeRef) throws IOException {
		ContentReader reader = contentService.getReader(nodeRef, ContentModel.PROP_CONTENT);
		
		if(reader == null)
			return null;
		
		InputStream originalInputStream = reader.getContentInputStream();
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
		
		final int BUF_SIZE = 1 << 8; // 1KiB buffer
		byte[] buffer = new byte[BUF_SIZE];
		int bytesRead = -1;
		
		while ((bytesRead = originalInputStream.read(buffer)) > -1) {
			outputStream.write(buffer, 0, bytesRead);
		}
		
		originalInputStream.close();
		
		return outputStream.toByteArray();
	}