private String convertVersionToSemanticLong(long versionValue) {
    //Given a version number MAJOR.MINOR.PATCH.REVISION, increment the:
    //1.MAJOR version when you make incompatible API changes
    //2.MINOR version when you add functionality in a backwards compatible manner
    //3.PATCH version when you make backwards compatible bug fixes
    //4.REVISION   version when you make fixes atop an original major.minor.patch version.
    //The MAJOR, MINOR, PATCH, and REVISION version are non-negative value.
    long major = versionValue / 1000000000L;
    long minor = (versionValue % 1000000000L) / 1000000L;
    long patch = (versionValue % 1000000L) / 1000L;
    long revision = versionValue % 1000L;
    return String.format("%d.%d.%d.%d", major, minor, patch, revision);
  }
Produces a string-represented value in the for {major}.{minor}.{patch}.{revision} from a long value, by performing
the following calculation: A * 10^9 + B * 10^6 + C * 10^3 + D, where version is A.B.C.D.
@param versionValue the value of the version from DB.
@return the converted string format version.
ambry-account/src/main/java/com/github/ambry/account/mysql/DatasetDao.java