code: public IData getData(final long pDataKey) throws TTIOException {
          checkState(!mDelegate.isClosed(), "Transaction already closed");
          // Calculate bucket and data part for given dataKey.
          final long dataBucketKey = pDataKey >> IConstants.INDIRECT_BUCKET_COUNT[3];
          final int dataBucketOffset = dataBucketOffset(pDataKey);
  
          final LogKey key = new LogKey(false, IConstants.INDIRECT_BUCKET_COUNT.length, dataBucketKey);
          LogValue container = mLog.get(key);
          IData item = null;
          // Bucket was modified...
          if (container.getModified() != null) {
              // ..check if the real data was touched and set it or..
              if (((DataBucket)container.getModified()).getData(dataBucketOffset) == null) {
                  item = ((DataBucket)container.getComplete()).getData(dataBucketOffset);
              }// ..take the data from the complete status of the page.
              else {
                  item = ((DataBucket)container.getModified()).getData(dataBucketOffset);
              }
              checkNotNull(item, "Item must be set!");
              item = mDelegate.checkItemIfDeleted(item);
          }// ...bucket was modified within a former version,...
          else {
              // check the former version as..
              container = mFormerLog.get(key);
              // ..modified element within this version or...
              if (container.getModified() != null) {
                  // ..check if the real data was touched and set it or..
                  if (((DataBucket)container.getModified()).getData(dataBucketOffset) == null) {
                      item = clone(((DataBucket)container.getComplete())).getData(dataBucketOffset);
                  }// ..take the data from the complete status of the page.
                  else {
                      item = clone(((DataBucket)container.getComplete())).getData(dataBucketOffset);
                  }
                  checkNotNull(item, "Item must be set!");
                  item = mDelegate.checkItemIfDeleted(item);
              }// bucket was modified long long before, read it normally.
              else {
                  item = mDelegate.getData(pDataKey);
              }
          }
          return item;
      }
docs: {@inheritDoc}