'Validates that metadata falls within acceptable limits.
:param metadata: to be validated
:raises HTTPBadRequest: if MAX_META_COUNT or MAX_META_OVERALL_SIZE
is exceeded, or if metadata contains non-UTF-8 data'

@staticmethod
def validate_metadata(metadata):

    meta_count = 0
    meta_size = 0
    for (key, (value, timestamp)) in metadata.items():
        key = key.lower()
        if ((value != '') and (key.startswith('x-account-meta') or key.startswith('x-container-meta'))):
            prefix = 'x-account-meta-'
            if key.startswith('x-container-meta-'):
                prefix = 'x-container-meta-'
            key = key[len(prefix):]
            meta_count = (meta_count + 1)
            meta_size = ((meta_size + len(key)) + len(value))
        bad_key = (key and (not check_utf8(key)))
        bad_value = (value and (not check_utf8(value)))
        if (bad_key or bad_value):
            raise HTTPBadRequest('Metadata    must    be    valid    UTF-8')
    if (meta_count > MAX_META_COUNT):
        raise HTTPBadRequest(('Too    many    metadata    items;    max    %d' % MAX_META_COUNT))
    if (meta_size > MAX_META_OVERALL_SIZE):
        raise HTTPBadRequest(('Total    metadata    too    large;    max    %d' % MAX_META_OVERALL_SIZE))
